package model

import (
	"gitee.com/chunanyong/zorm"
	"strconv"
	"time"
)

// LinkStructTableName 表名常量,方便直接调用
const LinkStructTableName = "t_link"

// LinkStruct
type LinkStruct struct {
	//引入默认的struct,隔离IEntityStruct的方法改动
	zorm.EntityStruct

	//Id ID
	Id int64 `column:"id"`

	//ShortId 短链接id
	ShortId string `column:"short_id"`

	//ShortUrl 完整短链接
	ShortUrl string `column:"short_url"`

	//OriginUrl 原始链接
	OriginUrl string `column:"origin_url"`

	//ClickNum 点击量
	ClickNum int `column:"click_num"`

	//Gid
	Gid int64 `column:"gid"`

	//Favicon 网站图标
	Favicon string `column:"favicon"`

	//EnableStatus 启用标识 1：未启用 2：启用
	EnableStatus int8 `column:"enable_status"`

	//ValidDateType 有效期类型 1：永久有效 2：自定义
	ValidDateType int8 `column:"valid_date_type"`

	//ValidDate 有效期
	ValidDate time.Time `column:"valid_date"`

	//Info 描述
	Info string `column:"info"`

	//CreateTime 创建时间
	CreateTime time.Time `column:"create_time"`

	//UpdateTime 修改时间
	UpdateTime time.Time `column:"update_time"`

	//DelTime 删除时间
	DelTime time.Time `column:"del_time"`

	//DelState 删除标识 0：未删除 1：已删除
	DelState int8 `column:"del_state"`

	//------------------数据库字段结束,自定义字段写在下面---------------//
	//如果查询的字段在column tag中没有找到,就会根据名称(不区分大小写,支持 _ 转驼峰)映射到struct的属性上
}

// GetTableName 获取表名称
// IEntityStruct 接口的方法,实体类需要实现!!!
func (entity *LinkStruct) GetTableName() string {
	// 使用 gid 进行分表

	s := strconv.FormatInt(entity.Gid%20, 10)

	return LinkStructTableName + "_" + s
}

// GetPKColumnName 获取数据库表的主键字段名称.因为要兼容Map,只能是数据库的字段名称
// 不支持联合主键,变通认为无主键,业务控制实现(艰难取舍)
// 如果没有主键,也需要实现这个方法, return "" 即可
// IEntityStruct 接口的方法,实体类需要实现!!!
func (entity *LinkStruct) GetPKColumnName() string {
	//如果没有主键
	//return ""
	return "id"
}
